#ifndef __LIGHT_H__
#define __LIGHT_H__
#include "Vec3f.h"
#include "ColorValue.h"

class Light {
	public:
		enum LightType {
			//点光源：光线来自同一点，辐射方向四面八方，只有位置，没有方向
			LT_POINT = 0,
			//方向光源（平行光）：来自远方的平行光，因此，只有方向，没有位置
			LT_DIRECTIONAL = 1,
			//点光源：模拟从光源发出的圆锥形的光，需要位置和方向，以及额外的衰减值
			LT_SPOTLIGHT = 2
		};

	public:
		//默认构造
		Light();

		//不应该直接调用，当使用场景管理器产生命名光源时使用
		Light(std::string& name);

		//默认析构
		~Light();

		//设置光源类型
		void setType(const LightType& lt);

		//得到光源类型
		LightType getType() const;

		//设置环境光
		void setAmbientColor(float read, float green, float blue, float alpha = 1.0f);

		//返回漫反射光
		const ColorValue& getAmbientColor(void) const;

		//设置散射光
		void setDiffuseColor(float red, float green, float blue, float alpha);

		//返回散射光
		const ColorValue& getDiffuseColor(void) const;

		//设置镜面光
		void setSpecularColor(float red, float green, float blue, float alpha);

		//返回镜面光
		const ColorValue& getSpecularColor(void) const;

		//设置位置
		void setPosition(float x, float y, float z);

		//设置位置
		void setPosition(Vector3f& vec);

		//返回光源位置
		const Vector3f& getPosition(void) const;

		//设置方向
		void setDirection(float x, float y, float z);

		//设置方向
		void setDirection(Vector3f& vec);

		//返回方向
		const Vector3f& getDirection(void) const;

		//设置衰减系数
		//range: 点光源聚光截止角
		//constant:常数衰减因子
		//linear:线性衰减因子
		//quadratic:平方衰减因子
		void setAttenuation(float range, float constant, float linear, float quadratic);


	protected:
		std::string	mLightName;
		LightType	mLightType;
		Vector3f		mPosition;
		Vector3f		mDirection;


		ColorValue	mDiffuse;
		ColorValue	mSpecular;
		ColorValue	mAmbient;

		float		mSpotFalloff;
		float		mRange;
		float		mAttenuationConst;
		float		mAttenuationLinear;
		float		mAttenuationQuad;	
};

#endif //__LIGHT_H__
